package com.baseframe.topic.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baseframe.mybatis.utils.BaseMetaObjectUtil;
import com.baseframe.mybatis.utils.PageInfo;
import com.baseframe.tool.result.R;
import com.baseframe.topic.entity.SnsTestTopic;
import com.baseframe.topic.entity.request.SnsTestTopicRequest;
import com.baseframe.topic.entity.vo.SnsTestTopicVO;
import com.baseframe.topic.service.SnsTestTopicService;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;

/**
 * 后台管理控制器类，处理SNS测试话题相关的请求。
 */
@RestController
@RequestMapping("/back/test-topic")
@AllArgsConstructor
public class BackSnsTestTopicController {

    private SnsTestTopicService snsTestTopicService;

    /**
     * 新增或更新SNS测试话题
     *
     * @param request SNS测试话题请求对象
     * @return R对象，包含新增或更新操作结果信息
     */
    @PostMapping("/save-or-update")
    public R<Object> saveOrUpdateTopic(@RequestBody SnsTestTopicRequest request) {
        // 创建一个SnsTestTopic对象
        SnsTestTopic snsTestTopic = new SnsTestTopic();
        // 将请求对象中的属性拷贝到SnsTestTopic对象中，并根据规定的更新填充属性进行处理
        BeanUtils.copyProperties(request, snsTestTopic, BaseMetaObjectUtil.getUpdateFillPropertiesName(snsTestTopic.getClass()));
        // 调用服务层进行保存或更新操作，并返回相应结果
        return snsTestTopicService.saveOrUpdate(request) ? R.success() : R.fail();
    }

    /**
     * 分页获取SNS测试话题列表
     *
     * @param pageInfo 分页信息对象
     * @param request  SNS测试话题请求对象
     * @return R对象，包含分页查询结果信息
     */
    @GetMapping("/page")
    public R<Page<SnsTestTopicVO>> testTopicPage(PageInfo pageInfo, SnsTestTopicRequest request) {
        // 调用服务层进行分页查询操作，并返回查询结果
        return R.data(snsTestTopicService.testTopicPage(pageInfo, request));
    }

    /**
     * 删除SNS测试话题
     *
     * @param request SNS测试话题请求对象
     * @return R对象，包含删除操作结果信息
     */
    @PostMapping("/delete")
    public R<Object> delete(@RequestBody SnsTestTopicRequest request) {
        // 检查必要的请求参数是否存在
        if (request.getId() == null) {
            return R.fail("缺少必要请求参数~");
        }
        // 调用服务层进行删除操作，并返回删除结果
        return snsTestTopicService.removeById(request.getId()) ? R.success() : R.fail();
    }
}

